001 /** 002 * Created by IntelliJ IDEA. 003 * User: Wei Wang 004 * Date: Apr 27, 2003 005 * Time: 1:14:55 PM 006 */ 007 008 package EVolve.util.phasedetectors; 009 010 import EVolve.visualization.XYViz.XYVisualization; 011 import EVolve.visualization.AxesPanel; 012 import EVolve.Scene; 013 import EVolve.util.HelperFuncs; 014 import javax.swing.*; 015 import java.awt.*; 016 017 public class PhaseAddRemover extends Thread{ 018 private XYVisualization workingViz; 019 private boolean bAdding; 020 021 public void beginAdd() { 022 this.bAdding = true; 023 start(); 024 } 025 026 public void beginRemove() { 027 this.bAdding = false; 028 start(); 029 } 030 031 public void run() { 032 workingViz = HelperFuncs.getActiveXYViz(); 033 034 if (workingViz == null) return; 035 036 Scene.getUIManager().enablePhaseDetectorButton(false); 037 038 workingViz.freeze(true); 039 AxesPanel canvas = (AxesPanel)((JScrollPane)workingViz.getPanel()).getViewport().getView(); 040 setCursor(canvas, false); 041 042 while (workingViz.isFreezed()) { 043 try { 044 sleep(100); 045 } catch (InterruptedException e) { 046 break; 047 } 048 } 049 050 setCursor(canvas, true); 051 int newPhase = getPhaseUnderMouse(); 052 053 if (newPhase >= 0) { 054 if (bAdding) 055 workingViz.getPhaseDetector().addPhaseManually(newPhase+1); 056 else 057 workingViz.getPhaseDetector().removePhaseManually(newPhase+1); 058 } 059 060 Scene.getUIManager().enablePhaseDetectorButton(true); 061 } 062 063 private void setCursor(JPanel panel, boolean reset) { 064 if (reset) 065 panel.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); 066 else 067 panel.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR)); 068 } 069 070 private int getPhaseUnderMouse() { 071 XYVisualization visual = HelperFuncs.getActiveXYViz(); 072 073 if (visual == null) { 074 return -1; 075 } 076 077 Point pt = visual.getMousePosition(); 078 AxesPanel canvas = (AxesPanel)((JScrollPane)visual.getPanel()).getViewport().getView(); 079 080 return canvas.getImageX(pt.x); 081 } 082 }